﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DAO;

namespace Thefaceless
{
    public partial class FStaffInfo : Form
    {
        private Boolean CheckAdd = false;
        private String MaNV;
        public int index;
        public FStaffInfo()
        {
            InitializeComponent();
        }

        public FStaffInfo(string manv)
        {
            InitializeComponent();
            this.MaNV = manv;
        }

        //đưa dữ liệu nhân viên lên dataGridview
        private void LoadStaff()
        {
            DataProvider dp = new DataProvider();
            string sql = "select * from NHANVIEN";
            DataTable dt = dp.ExecuteQuery(sql);
            this.dataListStaff.DataSource = dt;
        }

        private void FStaffInfo_Load(object sender, EventArgs e)
        {
            LoadStaff();
        }

        public void ClearTextbox()
        {
            this.txtIDStaff.Clear();
            this.txtNameStaff.Clear();
            this.txtAddress.Clear();
            this.cbPosition.Text = "";
            this.txtUserStaff.Clear();
            this.txtPassStaff.Clear();
        }

        //đưa dữ liệu từ dataGird view lên textbox
        private void LoadTextBox(int index)
        {
            DataGridViewRow row = dataListStaff.Rows[index];
            this.txtIDStaff.Text = row.Cells[0].Value.ToString();
            this.txtNameStaff.Text = row.Cells[1].Value.ToString();
            string Date = row.Cells[2].Value.ToString();
            int dd = int.Parse(Date.Substring(0, 2));
            int mm = int.Parse(Date.Substring(3, 2));
            int yy = int.Parse(Date.Substring(6, 4));
            this.dateDoB.Value = new DateTime(yy, mm, dd);
            this.txtAddress.Text = row.Cells[3].Value.ToString();
            this.txtUserStaff.Text = row.Cells[4].Value.ToString();
            this.txtPassStaff.Text = row.Cells[5].Value.ToString();
            this.cbPosition.Text = row.Cells[6].Value.ToString();
        }

        private void dataListStaff_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            //lấy chỉ số cột
            this.index = e.RowIndex;
            if (this.index < this.dataListStaff.Rows.Count - 1 && this.index >= 0)
            {
                this.LoadTextBox(index);
            }

        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn chắc chắn muốn xóa nhân viên này?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) ==
                System.Windows.Forms.DialogResult.OK)
            {
                string id = txtIDStaff.Text;
                //không được xóa nhân viên có quyền admin
                if (this.cbPosition.Text != "ADMIN")
                {
                    string sql = "delete from NHANVIEN where MaNV='" + id + "'";
                    DataProvider dp = new DataProvider();
                    dp.ExecuteQuery(sql);
                    this.ClearTextbox();
                    LoadStaff();
                }
            }
        }

        //kiểm tra id có tồn tại không
        private Boolean CheckId(string id)
        {
            DataProvider dp = new DataProvider();
            string sql = "select * from NHANVIEN";
            DataTable dt = dp.ExecuteQuery(sql);
            for (int i = 0; i < dt.Rows.Count; i++)
                if (id.Equals(dt.Rows[i][0].ToString()))
                    return true;
            return false;
        }

        //kiểm tra user có tồn tại không
        private Boolean CheckUser(string user)
        {
            DataProvider dp = new DataProvider();
            string sql = "select * from NHANVIEN";
            DataTable dt = dp.ExecuteQuery(sql);
            for (int i = 0; i < dt.Rows.Count; i++)
                if (user.Equals(dt.Rows[i][4].ToString()))
                    return true;
            return false;
        }

        //kiểm tra định dạng của manv
        Boolean checkFormatID(String id)
        {
            if (id.Length == 4)
            {
                String s = id.Substring(0, 2);
                String s2 = id.Substring(3);
                General r = new General();
                if (s.Equals("NV") && r.CheckIsNumber(s2) == true)
                    return true;
            }
            return false;

        }

        //click button save
        private void btnSave_Click(object sender, EventArgs e)
        {
            string id = this.txtIDStaff.Text;
            //kiểm tra xem có phải là thêm nhân viên không
            if (this.CheckAdd == false)
            {
                if (this.txtIDStaff.Text != "")
                {
                    if (MessageBox.Show("Bạn muốn lưu thay đỗi?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) ==
                        System.Windows.Forms.DialogResult.OK)
                    {
                        string add = txtAddress.Text;
                        string matkhau = txtPassStaff.Text;
                        string vitri = cbPosition.Text;
                        if (matkhau != "")
                        {
                            DataProvider dp = new DataProvider();
                            string sqlNV = "select ViTri from NHANVIEN where MaNV='" + this.MaNV + "'";
                            DataTable dt = dp.ExecuteQuery(sqlNV);
                            string dob = this.dateDoB.Value.Month + "-" + this.dateDoB.Value.Day + "-" + this.dateDoB.Value.Year;
                            if (id.Equals(this.MaNV) && vitri != dt.Rows[0][0].ToString())
                            {
                                MessageBox.Show("Không thể thay đỗi vị trí của chính mình", "Thông báo");
                            }
                            else
                            {
                                string sql = "update NHANVIEN set DiaChi ='" + add + "' ,MatKhau ='" + matkhau + "' ,ViTri ='" + vitri +
                                    "',NgaySinh ='" + dob + "' where MaNV ='" + id + "'";
                                dp.ExecuteQuery(sql);
                                LoadStaff();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Mật khẩu không được để trống", "Thông báo");
                        }
                    }

                }
            }
            else
            {
                if (MessageBox.Show("Bạn muốn thêm mới nhân viên này?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
                    == DialogResult.OK)
                {

                    string add = txtAddress.Text;
                    string matkhau = txtPassStaff.Text;
                    string vitri = cbPosition.Text;
                    string dob = this.dateDoB.Value.Month + "-" + this.dateDoB.Value.Day + "-" + this.dateDoB.Value.Year;
                    string name = txtNameStaff.Text;
                    string user = txtUserStaff.Text;
                    if (add != "" && matkhau != "" && vitri != "" && name != "" && user != "")
                    {
                        if (CheckId(id) == false)
                        {
                            if (CheckUser(user) == false)
                            {
                                if (checkFormatID(id) == true)
                                {
                                    string sql = "insert into NHANVIEN values ('" + id + "','" + name + "','" + dob + "','" + add + "','"
                                        + user + "','" + matkhau + "','" + vitri + "')";
                                    DataProvider dp = new DataProvider();
                                    dp.ExecuteQuery(sql);
                                    this.txtIDStaff.ReadOnly = true;
                                    this.txtNameStaff.ReadOnly = true;
                                    this.txtUserStaff.ReadOnly = true;
                                    LoadStaff();
                                }
                                else
                                {
                                    MessageBox.Show("Mã nhân viên phải có dạng \"NV**\" ");
                                }
                            }
                            else
                            {
                                MessageBox.Show("Tên đăng nhập trùng", "Thông báo");
                            }
                        }
                        else
                        {
                            MessageBox.Show("Mã nhân viên đã tồn tại", "Thông báo");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Vui lòng điền đầy đủ thông tin", "Thông báo");
                    }
                }
            }
        }


        private void btnAdd_Click(object sender, EventArgs e)
        {
            this.CheckAdd = true;
            this.txtIDStaff.ReadOnly = false;
            this.txtNameStaff.ReadOnly = false;
            this.txtUserStaff.ReadOnly = false;
            ClearTextbox();
        }

        //lấy giá trị từ combo box để làm điều kiện tìm kiếm
        private string checkSearchValue()
        {
            String value = this.cbKeyFind.Text;
            if (value == "Mã NV")
                return "MaNV";
            if (value == "Tên NV")
                return "TenNV";
            if (value == "Địa Chỉ")
                return "DiaChi";
            if (value == "Vị trí")
                return "ViTri";
            return null;
        }

        //function seach
        private void btnSearch_Click(object sender, EventArgs e)
        {
            if (checkSearchValue() != null)
            {
                string value = txtValue.Text;
                string sql;
                //kiểm tra giá trị tìm kiếm có rỗng không
                if (value != "")
                {
                    sql = "select * from NHANVIEN WHERE " + checkSearchValue() + "like'" + value + "%'";
                }
                //nếu rỗng thì hiện tất cả
                else
                    sql = "select * from NHANVIEN";
                DataProvider dp = new DataProvider();
                DataTable dt = dp.ExecuteQuery(sql);
                this.dataListStaff.DataSource = dt;
            }

        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.cbKeyFind.Text = "";
            this.txtValue.Text = "";
            LoadStaff();
            ClearTextbox();

        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            this.txtIDStaff.Clear();
            this.txtAddress.Clear();
            this.txtPassStaff.Clear();
            this.txtUserStaff.Clear();
            this.txtNameStaff.Clear();
            this.cbPosition.Text = "";
        }
    }
}

